package com.ruoyi.purchase.mapper;

import java.util.List;
import com.ruoyi.purchase.domain.Delivery;
import com.ruoyi.purchase.domain.DeliveryDetail;
import com.ruoyi.purchase.vo.BoxCodesVO;
import com.ruoyi.purchase.vo.DeliveryVO;

/**
 * 发货单Mapper接口
 * 
 * @author ruoyi
 * @date 2025-10-26
 */
public interface DeliveryMapper 
{



    /**
     * 更新发货单的状态
     */
    public int updateDeliveryStatus(Delivery delivery);



    List<DeliveryVO> selectDeliveryVOList(Delivery delivery);

    DeliveryVO selectDeliveryVOById(Long id);


    /**
     * 查询最大发货单号
     */
     String selectMaxDeliveryId(String datePrefix);

    /**
     * 根据送货单
     */
    List<BoxCodesVO> selectBoxCodesByDeliveryId(String deliveryId);



    /**
     * 查询发货单
     * 
     * @param id 发货单主键
     * @return 发货单
     */
    public Delivery selectDeliveryById(Long id);

    /**
     * 查询发货单列表
     * 
     * @param delivery 发货单
     * @return 发货单集合
     */
    public List<Delivery> selectDeliveryList(Delivery delivery);

    /**
     * 查询发货单详情表根据发货单的id
     *
     * @param delivery 发货单
     * @return 发货单集合
     */

    List<DeliveryDetail> selectDeliveryDetailByDeliveryId(String deliveryId);

    /**
     * 查询发货单详情表根据发货单的id
     *
     * @param delivery 发货单
     * @return 发货单集合
     */

    DeliveryVO selectDeliveryVOByDeliveryId(String deliveryId);

    /**
     * 根据箱码id寻找送货单号和id
     *
     * @param delivery 发货单
     * @return 发货单集合
     */

    DeliveryDetail selectdeliveryIdandIDByboxId(String boxId);

    /**
     * 新增发货单
     * 
     * @param delivery 发货单
     * @return 结果
     */
    public int insertDelivery(Delivery delivery);

    /**
     * 修改发货单
     * 
     * @param delivery 发货单
     * @return 结果
     */
    public int updateDelivery(Delivery delivery);

    /**
     * 删除发货单
     * 
     * @param id 发货单主键
     * @return 结果
     */
    public int deleteDeliveryById(Long id);

    /**
     * 批量删除发货单
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteDeliveryByIds(Long[] ids);

    /**
     * 批量删除发货单明细
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteDeliveryDetailByDeliveryIds(Long[] ids);
    
    /**
     * 批量新增发货单明细
     * 
     * @param deliveryDetailList 发货单明细列表
     * @return 结果
     */
    public int batchDeliveryDetail(List<DeliveryDetail> deliveryDetailList);
    

    /**
     * 通过发货单主键删除发货单明细信息
     * 
     * @param id 发货单ID
     * @return 结果
     */
    public int deleteDeliveryDetailByDeliveryId(Long id);
}
